دونالد کنوث مولف کتاب «هنر برنامهنویسی کامپیوتر» است. یک شاهکار 4 جلدی دنبالهدار از دوره کاری زندگی او. در سال 1968 جلد اول این کتاب عرضه شد و جلدهای دیگر (که در قالب یک مجموعه بستهبندی شده با قیمت 250 دلار به فروش میرسند)، در سال 2013 از سوی مجله آمریکن ساینتیست در کنار کتابهایی همچون نسخه ویژه «زندگینامه چارلز داروین»، «مردان واقعی» (The Right Stuff) اثر تام ولف و «بهار خاموش» اثر ریچارد کارسون و «تک نگاریهای آلبرت انیشتین، جان فون نویمان و ریچارد فاینمن» در فهرست کتابهای علمی قرن قرار گرفتند.
کتاب طولانی، جامع و کامل «هنر برنامهنویسی کامپیوتر» با یک میلیون نسخه چاپی از کتابهای ارزشمند به شمار میرود. جلد اول این کتاب با نقل قولی از «کتاب آشپزی مک کال» آغاز میشود:
«این کتاب متعلق به شماست، کتابی که با ارسال هزاران نامه درخواست انتشار آن را داشتید. تحریر این کتاب سالها زمان برده است، دستورهای آشپزی زیاد و مختلفی را بررسی کردهایم تا بتوانیم بهترین، جالبترین و کاملترین آنها را در اختیار شما قرار دهیم.» و بعد از 652 صفحه با عبارتی ازبیل گیتس در پشت جلد به پایان میرسد: «اگر توانستی تمام آن را بخوانی، یک رزومه برایم بفرست.»
محتوای کتاب دربرگیرنده الگوریتمهاست. دستورالعملهایی که عصر دیجیتال از آن تغذیه میکند. اگرچه دکتر کنوث معتقد است: «الگوریتمها را میتوان در کتیبههای بابلی 3800 سال قبل هم یافت.» او یک برنامهنویس الگوریتم لایق و برجسته است، نام او در برخی از مهمترین نمونهها همچون الگوریتم جستوجوی رشته یا تطبیق رشتهها (Knuth-Morris-Pratt) خودنمایی میکند. این الگوریتم که در سال 1970 طراحی شده، قادر است تمام کلمات یا الگوهای حرفی در یک متن را بیابد. برای نمونه زمانیکه Command+F را برای جستوجوی یک کلید واژه در سند فشار میدهید.
در حال حاضر، دکتر کنوث 80 سال دارد. در روزهای جوانی او نزدیک دستگاه کار میکرد و با صداقت از سروهمبندیهایی که با صفر و یک انجام میداد، مینوشت. دکتر نویگ میگوید: «کنوث نشان داد که این سیستم میتواند از هر جهت تا سطح کد ماشین قابل درک باشد.» البته، امروزه با وجود الگوریتمهایی که زندگی و هستی ما را برنامهریزی (و تضعیف) میکنند، یک برنامهنویس متوسط دیگر وقتی برای دستکاری باینری ندارد و در عوض با سلسله مراتبهای انتزاعی، لایههای بالای لایههای کد و اغلب با زنجیرهای ازکد که از کتابخانههای کد وام گرفته شده، کار میکند.
دکتر نویگ معتقد است: «گاهی اوقات در گوگل، ما فقط کارمندان را با هم آشنا میکنیم، اما وقتی قرار است به میلیاردها کاربر خدمترسانی شود باید این کار به شکل موثری انجام شود. یک بهبود 10 درصدی در بهرهوری به میلیاردها دلار میانجامد و برای آنکه بخواهیم به آخرین سطح بهرهوری برسیم، باید از همه چیز اطلاع داشته باشیم.»
شکل1 . دونالد کنوث در خانهاش در استنفورد کالیفرنیا. فردی کمالگر و مشهور است و به گفته او هر کسی بتواند در هر کدام از کتابهایش اشتباهی پیدا کند، جایزه دریافت خواهد کرد.
شکل2 . دکتر کنوث در موسسه تکنولوژی در کالیفرنیا، جاییکه مدرک دکترای خود را در سال 1963 دریافت کرده است
آندری برودر، دانشمند برجسته در گوگل و یکی از دانشجویان فارغالتحصیل و سابق دکتر کنوث میگوید: «ما میخواهیم برای انجام هر کاری یک مبنای نظری داشته باشیم. ما یک الگوریتم ناقص یا کمارزش یا درجه دوم نمیخواهیم.»
اپ Google Trips که در سال 2016 ساخته شد، یک «الگوریتم جهتیابی» است که فعالیتهای گردشگری پیشنهادی را در یک روز طرحریزی میکند. این گروه از افراد روی «بالا بردن کیفیت روزهای کسلکننده» کار میکنند. مثلا، کاربران را برای دیدن مکانهای مختلف به محلهها که قبلا از آنها بازدید کردهاند، نمیفرستند. آنها از یک الگوریتم 300 ساله متعلق به ریاضیدان سوئیسی «لئونارد اویلر» الهام گرفتند. (کسی که میخواست نقشه راه به شهر Prussian کنیگسبرگ را بهگونهای بکشد که این مسیر از 7 پل آن شهر تنها یکبار عبور کند.) دکتر کنوث در اولین جلد رساله خود به این مشکل قدیمی اویلر پرداخته است. (او یک بار از روش اویلر در برنامهنویسی کامپیوتری که چرخ خیاطی را کنترل میکرد، استفاده کرد)دکتر کنوث به معرفی مفهوم «برنامهنویسی ادیبانه» یا« literate programming » معروف است. برنامهنویسی ادیبانه بر نوشتن کدی تاکید دارد که توسط انسان و کامپیوتر قابل خواندن باشد. کنوث عنوان میکند برخی از برنامههای کامپیوتر همانند شعرهای الیزابت بیشاپ یا آثار ادبی ارزشمند پولیتزر هستند.
دکتر کنوث فردی کمالگراست. رندال مونرو، کارتونیست و نویسنده «Thing Explainer»، اسم دکتر کنوث را نخستین بار از متخصصان علوم کامپیوتر شنید که میگفتند: «دکتر کنوث قول داده به هر کسی که بتواند در هر کدام از کتابهایش اشتباهی پیدا کند، جایزه دهد.» مونرو میگفت: «این افراد در مورد جایزه کنوث به گونهای صحبت میکردند که گویا «جایزه نوبل» علوم کامپیوتر است.»
استانداردهای دقیق دکتر کنوث نشانگر این موضوع است که چرا زندگی کاری او شبیه هیچکس دیگری نیست. کنوث با یکی از بنیانگذاران گوگل سِرگی برین، بر سر این موضوع که آیا برین میتواند دکترای خود را قبل از اتمام کتابهایش به پایان برساند، شرطبندی کرد.
طلوع الگوریتم
دکتر کنوث، اولین مقاله فنی خود را در سن 19 سالگی در مجله Mad منتشر کرد و قبل از اینکه رشته کامپیوتر وجود داشته باشد، به یک دانشمند کامپیوتر تبدیل شد. او در دانشگاهی که هم اکنون Case Western Reserve نام دارد، ریاضی میخواند و با نگاهی گذرا به نمونه برنامههای مربوط به رایانه بزرگ IBM 650 (یک کامپیوتر دهدهی) این دانشگاه متوجه کمبودهای آن شد و نرمافزار و کتاب درسی را که در کلاس استفاده میشد، بازنویسی کرد. او در یک پروژه جانبی مسائل آماری مربوط به تیم بسکتبال را انجام داد. یک برنامه کامپیوتری نوشت و به تیم بسکتبال کمک کرد تا در لیگ خود پیروز شوند.
دکتر کنوث در ایام تعطیلات تابستان به دلیل نوشتن کامپایلر در مقایسه با اساتید دیگر در طول سال درآمد بیشتری داشت. کامپایلر همانند یک مترجم یک زبان برنامهنویسی سطح بالا را (شبیه جبر) به یک زبان سطح پایینتر (گاهی اوقات باینری محرمانه) تبدیل میکند و به شکل ایدهآل آن را بهبود میبخشد. در علم کامپیوتر، «بهینهسازی» در واقع یک هنر است.
در نهایت، دکتر کنوث خودش به یک کامپایلر تبدیل شد و رشته جدیدی را یافت که آن را «تحلیل الگوریتمها» نامید. یک ناشر از او برای نوشتن کتابی در مورد کامپایلرها دعوت کرد، اما در نهایت نوشتههای او به کتابی شامل «دانستههای او در مورد کامپیوتر» ختم شد؛ «کتابی در مورد الگوریتمها.»
شکل3 . دکتر کنوث در سال 1981، مشغول نگاه کردن به مجله Mad که اولین مقاله فنی او را چاپ کرده است. در آن زمان او 19 سال سن داشت.
شکل4 . کتاب چهار جلدی «هنر برنامهنویسی کامپیوتر». بیلگیتس در اعلانی مبالغهآمیز در نیویورک تایمز نوشت: «هنر برنامهنویسی کامپیوتر» جلد 1 تا 4. «اگر توانستید تمام این 4 جلد را بخوانید، یک رزومه برای من بفرستید»
کتاب این گونه آغاز میشود: «در زمان رنسانس، منشا این کلمه مشخص نبود و زبانشناسان اولیه در تلاش بودند تا با ترکیب کلماتی همچون Algrios {دردناک} + Arithmos { عدد} ریشه این کلمه را بیابند.» کنوث ادامه میدهد: «نامی مشابه این کلمه در کتاب فارسی قرن نهم به تالیف ابوعبدالله محمد بن موسی خوارزمی (به لاتین Algorithmi) آمده است.» او که هیچگاه کاری را نیمهکاره رها نمیکند، در سال 1970 به سرزمین اجدادی الخوارزمی در ازبکستان سفر کرد.
دکتر کنوث در ابتدا قصد داشت تنها یک جلد کتاب بنویسد. اما وقتی که علم کامپیوتر «انفجار بزرگ» خود را تجربه کرد، تصمیم گرفت این پروژه را در 7 جلد ارائه دهد. او برای آنکه بتواند شانس پایان دادن به کتابهایش را بالا ببرد، به شدت زمان خود را مدیریت میکند. او در سن 55 سالگی بازنشسته شد، مشاغل عمومی خود را محدود و ایمیل را ترک کرد. به گفته آندری برودر یکی از خصلتهای بارز استاد از همان اوایل دهه 1980 مدیریت زمان بوده است.
دکتر کنوث صبحهای جمعه با دانشجویان قرار میگذاشت و شبها را در آزمایشگاه جان مککارتی، بنیانگذار هوش مصنوعی میگذراند تا به کامپیوترها که در آن وقت شب مورد استفاده قرار نمیگرفتند، دسترسی داشته باشد. دکتر کنوث وحشتزده از اینکه با ظهور نشر دیجیتال برای کتاب محبوبش چه اتفاقی میافتد، به فکر ایجاد سیستم حروفچینی کامپیوتری TeX افتاد که استاندارد طلایی برای انواع ارتباطات و متون علمی به شمار میرود. برخیها این کار دکتر کنوث را بزرگترین کمک او به جهان و بزرگترین کمک او به تایپوگرافی از زمان گوتنبرگ میدانند.
این دوران 10 ساله به زمانی برمیگردد که کامپیوترها در میان کاربران به اشتراک گذاشته میشدند و سرعت آنها در شب که افراد خواب بودند، بیشتر میشد. بنابراین دکتر کنوث کارهای روز خود را به شب منتقل کرد، برنامهکاری خود را به 12 ساعت تغییر داد و قرار ملاقات با دانشجویان را به روزهای جمعه از 8 صبح تا نیمه شب موکول کرد.
شکل 5 . دکتر کنوث مشغول بحث با هرمان زاپف- طراح تایپ- در مورد تایپفیسها. به تصور بسیاری سیستم حروفچینی کامپیوتری TeX دکتر کنوث بزرگترین کمک به تایپوگرافی از زمان گوتنبرگ بوده است.
به طور حتم، محاسبات الگوریتمی باعث بروز مشکلاتی در دنیای واقعی میشوند. الگوریتمهایی که توسط انسان نوشته میشوند، مشکلات دشوار را حل میکنند، اما کدهایی تولید میکنند که با اشکالها و تورشهایی (Bias) همراه هستند و همینها به اندازه کافی دردسرآفرین هستند. شاید نگرانکنندهتر از آنها الگوریتمهایی است که انسانها آن را نمینویسند، یعنی الگوریتمهایی که توسط ماشینها و بر اساس یادگیری آنها نوشته میشود.
برنامهنویسان همچنان به ماشین آموزش میدهند و دادهها را به خورد آنها میدهند. (دادهها حوزه جدیدی از تورشها و باگها هستند و برطرف کردن باگها و تورشها در این حوزه به مراتب دشوارتر است). بههرحال، کوین اسلاوین، پژوهشگر در مدیا لب، M.I.T میگوید: «ما در حال نوشتن الگوریتمهایی هستیم که قادر به خواندن آنها نیستیم و همین لحظه منحصربهفردی را در تاریخ میسازد که در آن تحتتاثیر ایدهها، اقدامها و تلاشهایی قرار میگیریم که مطابق با یکسری علوم فیزیکی هستند که منشا انسانی دارند اما درک انسانی ندارند.»
شکل 6 . دکتر کنوث در خانهاش پشت میز در سال 1999
شکل 7 . برخی از یادداشتهای دکتر کنوث
امروزه، برنامهنویسان از آنچه که کنوث و دیگران به عنوان مولفههای الگوریتم به کار بردهاند، استفاده میکنند و آنها را با چیزهای دیگری که نیاز دارند ادغام میکنند. هوش مصنوعی همین کار را انجام میدهد؛ یعنی بخش ادغام با یکدیگر بهصورت خودکار و بر اساس دادهها و نه بر اساس کار برنامهنویس انجام میشود. شما میخواهید هوش مصنوعی بتواند مولفهها را ادغام کند تا پاسخ خوبی بر اساس دادهها حاصل شود. اما باید تصمیم بگیرید که آن مولفهها چه مولفههایی باشند. مولفهها میتوانند یک صفحه یا یک فصل از کتاب کنوث باشند، چون این بهترین روش ممکن برای انجام برخی کارهاست.
دکتر کنوث همچنان به کارش ادامه میدهد. او تصریح میکند اتمام کتاب «هنر برنامهنویسی کامپیوتر» 25 سال دیگر به طول خواهد انجامید، اگرچه این مدت از سال 1980 ثابت بوده است. آیا ممکن است الگوریتمهای نوشتن در انتهای کتاب بهصورت فصل یا صفحه ارائه شوند؟ پاسخ کنوث این است: «قطعاً خیر.»
«من نگرانم که الگوریتمها در جهان بسیار برجسته و قابل توجه شوند. زمانی که کار را آغاز کردیم، دانشمندان کامپیوتر نگران بودند که کسی به ما گوش ندهد. حالا نگرانیم که آدمهای زیادی به ما گوش بدهند.»
به این مطلب چند ستاره میدهید؟(امتیاز: 4.5 - رای: 1)
- منبع: ماهنامه شبکه
- نویسنده: مهسا قنبری